//
//  HMStatusListViewModel.swift
//  SinaWeiBo
//
//  Created by immncjykeny on 2017/5/4.
//  Copyright © 2017年 immncjykeny. All rights reserved.
//

import Foundation
//最大上拉刷新尝试次数
private let maxPullupTrytimes = 3

/// 微博数据列表视图模型
/*
 父类的选择
 
 - 如果类需要使用 `KVC` 或者字典转模型框架设置对象值，类就需要继承自 NSObject
 - 如果类只是包装一些代码逻辑(写了一些函数)，可以不用任何父类，好处：更加轻量级
 - 提示：如果用 OC 写，一律都继承自 NSObject 即可
 
 使命：负责微博的数据处理
 1. 字典转模型
 2. 下拉／上拉刷新数据处理
 */

class HMStatusListViewModel {
    
    lazy var statusList = [HMStatus]()
    //上拉刷新错误次数
     private var pullupErrorTimes = 0
    //shouldReflesh 是否该刷新变量
    
    
    func loadStatus(pullup:Bool,completion:@escaping(_ isSuccess:Bool,_ shouldReflesh:Bool) -> ()){
        //判断是否上拉刷新 同事检查刷新错误
        if pullup && pullupErrorTimes > maxPullupTrytimes {
            completion(true, false)
            return
        }
        
        
        //下拉刷新取出数组最新一条数据  如果没有 下拉刷新就是0条数据 默认刷新最新的20条数据
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        
        //上拉刷新 取出数组最后一条数据 如果没有 上拉刷新0条数据
        let max_id = !pullup ? 0 :(statusList.last?.id ?? 0)
        HMShareManager.shared.statusList(since_id:since_id,max_id:max_id) { (list, isSuccess) in
            //1.字典转模型
            guard let array = NSArray.yy_modelArray(with: HMStatus.self, json: list ?? []) as? [HMStatus] else{
                
                completion(isSuccess,false)
                
                return
            }
            print("刷新到\(array.count)数据")
            //2.拼接数据
            //如果是上拉刷新 就拼接数组最后一条
            if pullup {
                self.statusList += array
                //如果是下拉刷新 就拼接数组最新一条
            }else {
                self.statusList = array + self.statusList
            }
            
            
            //判断上拉刷新的数据量
            if pullup && array.count == 0 {
                
                self.pullupErrorTimes += 1
                
                completion(isSuccess, false)
                
                //3.完成回调
            }else{
                completion(isSuccess, true)
            }
        }
    }
    
    
}
